#include"Queue.hpp"
#include<ctime>
#include<unistd.h>
#define P 5
#define C 3
void*Productor(void*args)
{
    //分离线程；
    pthread_detach(pthread_self());
    Queue<int>*ptr = static_cast<Queue<int>*>(args);
    while(true)
    {
        // sleep(1);
        int n = rand()%10 + 1;
        ptr->push(n);
        cout<<pthread_self()<<":productor a date:"<<n<<endl;
    }
    return nullptr;

}
void*Consumer(void*args)
{
    pthread_detach(pthread_self());
    Queue<int>*ptr = static_cast<Queue<int>*>(args);
    while(true)
    {
        sleep(1);
        int date = ptr->pop();
        cout<<pthread_self()<<":consumer a date "<<date<<endl;
    }
    return nullptr;
}
int main()
{
    //1.version,但生产单消费；
    pthread_t consumer,productor;
    //让所有线程看到同一份资源；
    Queue<int>*ptr = new Queue<int>;
    ptr->Init();
    // pthread_create(&productor,nullptr,Productor,ptr);
    // pthread_create(&consumer,nullptr,Consumer,ptr);
    //2.version，多生产多消费；
    for(int i = 0;i<P;i++)
    {
        pthread_t tid;
        pthread_create(&tid,nullptr,Productor,ptr);
    }
    for(int i = 0;i<C;i++)
    {
        pthread_t tid;

        pthread_create(&tid,nullptr,Consumer,ptr);

    }
    while(true)
    {
        sleep(1);
    }
    return 0;
}